import axios from 'axios'
import { Loading,Message } from 'element-ui'

const loading = {
    loadingInstance:null, // ←左边这一项是代表Loading的实例
    // 打开加载
    open: function () {
        // 创建实例并打开加载窗口
      if (this.loadingInstance===null) {
        // 若Loading实例的取值为空，则创建实例
        console.log('创建加载实例')
        this.loadingInstance = Loading.service({target:'.main',text:'玩命加载中……', /* background:'rgba(0,0,0,0.5)' */}); // ←注意：此处不要少了“this”关键字，否则浏览器的控制台会报错说“Loading未定义”
      }
    },
    // 关闭加载
    close:function () {
        // 若Loading实例的取值不为空，则可以关闭加载窗口
        if (this.loadingInstance!==null) {
            this.loadingInstance.close()
        }
        this.loadingInstance = null
    }
}

// Loading.service({target:'body'});
// Loading.service({target:'.main'});

// 此处↓写路径时注意：因为浏览器会自动去public目录下寻找被请求的目标JSON文件，所以路径直接就是“/+JSON文件的文件名”
/* axios.get('/db.json').then(response => {
    const data = response.data
    console.log(response.data)
}) */

const request = axios.create({
    // baseURL:'/',
    baseURL:process.env.VUE_APP_BASE_API,
    timeout:5000 // 当发送请求时，接口超过多长时间未响应可被认定为请求超时。此处为5000毫秒
    
})

// 请求拦截器
request.interceptors.request.use(
    config => {
    // 拦截请求（interceptors的中文意思是“拦截器”）
        // 打开加载窗口
        loading.open()
        return config;
    },
    error => {
        // 关闭加载窗口
        loading.close()
    // 出现异常时
        return Promise.reject(error);
    }
)

// 响应拦截器
request.interceptors.response.use(
    response => {
        // 拦截响应
        // response.data
        // 关闭加载窗口
        loading.close()
        const be_responsed_data = response.data
        console.log(be_responsed_data)
        // 正常情况下后台响应的状态码是2000。如果后台响应的状态码不是2000，说明后台在处理时遇到了问题↓
        if (be_responsed_data.code!==2000) {
            Message({
                message:be_responsed_data.message || '对不起，系统出现了异常，请稍后再试',
                type:'warning',
                duration: 5000
    
            })
        }
        return response
    },
    error => {
        // 关闭加载窗口
        loading.close()
        console.log('response.error',error.response.status)
        Message({
            message:error.message,
            type:'error',
            duration: 5000

        })
        return Promise.reject(error);
    }
)

/* request.get('/db.json').then(response => {
    console.log(response.data)
}) */

export default request // 导出自定义创建的axios对象